CREATE OR REPLACE PACKAGE BODY EDIV2.Pack_?CategoriaSolMultiple AS
/******************************************************************************
   NAME:       Pack_?Categoria_SolMultiple
   PURPOSE:

   REVISIONS:
   Ver        Date        Author           Description
   ---------  ----------  ---------------  ------------------------------------
   1.0        13/3/2013   Luis Antonio Lara Capetillo       Creacion del Paquete
******************************************************************************/

PROCEDURE  SolMultipleInsertarModificar(pniddocumento NUMBER, ptipo_maniobra VARCHAR2, 
						pestado VARCHAR2, particulo NUMBER, pfecha_solicitud VARCHAR2, 
						ppuerto_destino NUMBER, ppuerto_descarga NUMBER, pbuque NUMBER, 
						ppatente VARCHAR2, prectificado VARCHAR2, pfolio_entrada NUMBER, 
						pfolio_programacion NUMBER, pfecha_entrada VARCHAR2, pfecha_rectificacion VARCHAR2, 
						pfecha_programacion VARCHAR2, pfeta VARCHAR2, pidrecinto_desde NUMBER, 
						pidrecinto_hasta NUMBER, pvid NUMBER, pid_mcia VARCHAR2, 
						ppedimento VARCHAR2, pregimen VARCHAR2, pbooking VARCHAR2, 
						pregistro VARCHAR2, pconso_desconso VARCHAR2, pdc_emp_aduanal VARCHAR2, 
						pemp_aduanal VARCHAR2, pcliente VARCHAR2, prfc VARCHAR2, 
						pdireccion VARCHAR2, pciudad VARCHAR2, pcp VARCHAR2, 
						plinea_trans VARCHAR2, pchofer VARCHAR2, pplacas VARCHAR2, 
						pno_economico VARCHAR2, pno_licencia VARCHAR2, pfecha_actualizacion VARCHAR2, 
						prfc_responsable VARCHAR2, pnombre_responsable VARCHAR2, prepresentante VARCHAR2, 
						pprocesado_sip NUMBER, pprogramado_calt NUMBER, prfc_transportista VARCHAR2, 
						, pTransaccion OUT NUMBER, pMensaje OUT VARCHAR2)
AS
vExisteRegistro NUMBER(1);
BEGIN
  SELECT count(*)
  INTO   vExisteRegistro
  FROM   SolMultiple
  WHERE  nidDocumento=pNidDocumento;
  
  IF vExisteRegistro=0 THEN
    INSERT INTO SolMultiple
	           (nid, niddocumento, tipo_maniobra, 
						estado, articulo, fecha_solicitud, 
						puerto_destino, puerto_descarga, buque, 
						patente, rectificado, folio_entrada, 
						folio_programacion, fecha_entrada, fecha_rectificacion, 
						fecha_programacion, feta, idrecinto_desde, 
						idrecinto_hasta, vid, id_mcia, 
						pedimento, regimen, booking, 
						registro, conso_desconso, dc_emp_aduanal, 
						emp_aduanal, cliente, rfc, 
						direccion, ciudad, cp, 
						linea_trans, chofer, placas, 
						no_economico, no_licencia, fecha_actualizacion, 
						rfc_responsable, nombre_responsable, representante, 
						procesado_sip, programado_calt, rfc_transportista, 
						)
    VALUES     (seq_SolMultiple.nextval, pniddocumento, ptipo_maniobra, 
						pestado, particulo, to_date(pfecha_solicitud,'DD/MM/YYYY HH24:MI:SS'), 
						ppuerto_destino, ppuerto_descarga, pbuque, 
						ppatente, prectificado, pfolio_entrada, 
						pfolio_programacion, to_date(pfecha_entrada,'DD/MM/YYYY HH24:MI:SS'), to_date(pfecha_rectificacion,'DD/MM/YYYY HH24:MI:SS'), 
						to_date(pfecha_programacion,'DD/MM/YYYY HH24:MI:SS'), to_date(pfeta,'DD/MM/YYYY HH24:MI:SS'), pidrecinto_desde, 
						pidrecinto_hasta, pvid, pid_mcia, 
						ppedimento, pregimen, pbooking, 
						pregistro, pconso_desconso, pdc_emp_aduanal, 
						pemp_aduanal, pcliente, prfc, 
						pdireccion, pciudad, pcp, 
						plinea_trans, pchofer, pplacas, 
						pno_economico, pno_licencia, to_date(pfecha_actualizacion,'DD/MM/YYYY HH24:MI:SS'), 
						prfc_responsable, pnombre_responsable, prepresentante, 
						pprocesado_sip, pprogramado_calt, prfc_transportista, 
						);
  ELSE
    UPDATE SolMultiple
    SET    niddocumento=pniddocumento, tipo_maniobra=ptipo_maniobra, 
		estado=pestado, articulo=particulo, fecha_solicitud=to_date(pfecha_solicitud,'DD/MM/YYYY HH24:MI:SS'), 
		puerto_destino=ppuerto_destino, puerto_descarga=ppuerto_descarga, buque=pbuque, 
		patente=ppatente, rectificado=prectificado, folio_entrada=pfolio_entrada, 
		folio_programacion=pfolio_programacion, fecha_entrada=to_date(pfecha_entrada,'DD/MM/YYYY HH24:MI:SS'), fecha_rectificacion=to_date(pfecha_rectificacion,'DD/MM/YYYY HH24:MI:SS'), 
		fecha_programacion=to_date(pfecha_programacion,'DD/MM/YYYY HH24:MI:SS'), feta=to_date(pfeta,'DD/MM/YYYY HH24:MI:SS'), idrecinto_desde=pidrecinto_desde, 
		idrecinto_hasta=pidrecinto_hasta, vid=pvid, id_mcia=pid_mcia, 
		pedimento=ppedimento, regimen=pregimen, booking=pbooking, 
		registro=pregistro, conso_desconso=pconso_desconso, dc_emp_aduanal=pdc_emp_aduanal, 
		emp_aduanal=pemp_aduanal, cliente=pcliente, rfc=prfc, 
		direccion=pdireccion, ciudad=pciudad, cp=pcp, 
		linea_trans=plinea_trans, chofer=pchofer, placas=pplacas, 
		no_economico=pno_economico, no_licencia=pno_licencia, fecha_actualizacion=to_date(pfecha_actualizacion,'DD/MM/YYYY HH24:MI:SS'), 
		rfc_responsable=prfc_responsable, nombre_responsable=pnombre_responsable, representante=prepresentante, 
		procesado_sip=pprocesado_sip, programado_calt=pprogramado_calt, rfc_transportista=prfc_transportista
    WHERE  nidDocumento=pNidDocumento;
  END IF;
  
  COMMIT;
  pTransaccion := 1;
  pMensaje := 'Terminado OK';
  dbms_output.put_line('Terminado OK');

EXCEPTION
  WHEN OTHERS THEN
    pTransaccion := 0;
    pMensaje := 'Error en  SolMultiple_InsertarModificar:' || SQLCODE || ' Mensaje: ' || sqlerrm;
    dbms_output.put_line('Error en  SolMultiple_InsertarModificar:' || SQLCODE || ' Mensaje: ' || sqlerrm);
END;

PROCEDURE  SolMultipleConsultar(pNidDocumento NUMBER, pTransaccion OUT NUMBER, pCursor OUT cursor_type)
AS
BEGIN
  OPEN pCursor FOR
    SELECT nid, niddocumento, tipo_maniobra, 
						estado, articulo, fecha_solicitud, 
						puerto_destino, puerto_descarga, buque, 
						patente, rectificado, folio_entrada, 
						folio_programacion, fecha_entrada, fecha_rectificacion, 
						fecha_programacion, feta, idrecinto_desde, 
						idrecinto_hasta, vid, id_mcia, 
						pedimento, regimen, booking, 
						registro, conso_desconso, dc_emp_aduanal, 
						emp_aduanal, cliente, rfc, 
						direccion, ciudad, cp, 
						linea_trans, chofer, placas, 
						no_economico, no_licencia, fecha_actualizacion, 
						rfc_responsable, nombre_responsable, representante, 
						procesado_sip, programado_calt, rfc_transportista, 
						
    FROM   SolMultiple
    WHERE  nidDocumento=pNidDocumento;
    
  pTransaccion := 1;
EXCEPTION 
  WHEN OTHERS THEN
    pTransaccion := 0;
END;

PROCEDURE  SolMultipleDetalleXML(pNidDocumento NUMBER, pTransaccion OUT NUMBER, pEncabezado OUT cursor_type,
                           pDatos OUT cursor_type, pIncidencias OUT cursor_type)
AS
BEGIN
  OPEN pEncabezado FOR
    SELECT d.nid, d.codigo, d.fechacreacion,
           (us.nombre ||' '||us.apellidopat||' '||us.apellidomat) as nombre, d.nidusuario
    FROM   documento d, usuarios us
    WHERE  d.nid=pnidDocumento
    AND    d.nidusuario=us.nid;
    
  OPEN pDatos FOR
    SELECT nid, niddocumento, tipo_maniobra, 
						estado, articulo, fecha_solicitud, 
						puerto_destino, puerto_descarga, buque, 
						patente, rectificado, folio_entrada, 
						folio_programacion, fecha_entrada, fecha_rectificacion, 
						fecha_programacion, feta, idrecinto_desde, 
						idrecinto_hasta, vid, id_mcia, 
						pedimento, regimen, booking, 
						registro, conso_desconso, dc_emp_aduanal, 
						emp_aduanal, cliente, rfc, 
						direccion, ciudad, cp, 
						linea_trans, chofer, placas, 
						no_economico, no_licencia, fecha_actualizacion, 
						rfc_responsable, nombre_responsable, representante, 
						procesado_sip, programado_calt, rfc_transportista, 
						
    FROM   SolMultiple
    WHERE  nidDocumento=pNidDocumento;
    
  OPEN pIncidencias FOR
    SELECT i.fechaemision, i.descripcion, us.nombre
    FROM   incidencia i, usuarios us
    WHERE  niddocumento=pnidDocumento
    AND    i.nidusuario=us.nid;
    
    pTransaccion := 1;
    
EXCEPTION 
  WHEN OTHERS THEN
    pTransaccion := 0;
END;

--otros

END Pack_?Categoria_SolMultiple;
